#define _CRT_SECURE_NO_WARNINGS

#include <iostream>

using namespace std;


//
//class Stack
//{
//public:
//	//Stack(int capacity = 4)
//	//{
//	//	//cout << "Stack(int capacity = 4)" << endl;
//
//	//	_a = new int[capacity];
//	//	_top = 0;
//	//	_capacity = 4;
//	//}
//	Stack(int n)
//		: _a(new int[n])
//		, _top(0)
//		, _capacity(n)
//		{}
//
//private:
//	int* _a = new int;
//	int _top = 0;
//	int _capacity = 0;
//};
//
//class Myqueue
//{
//public:
//	Myqueue()
//		:pushst(10)
//		,popst(10)
//	{
//		cout << "Myqueue()" << endl;
//	}
//private:
//	Stack pushst;
//	Stack popst;
//};


//class A
//{
//public:
//	A(int n = 4)
//		: _n(new int[n])
//		, _a(n)
//		, _b(n)
//		, _st(4)
//	{}
//private:
//	int* _n;
//	int& _a;
//	const int _b;
//
//	Stack _st;
//};

//class B
//{
//public:
//	B(int n = 4)
//		:_a(n)
//	{}
//private:
//	int* _n = new int;
//	int& _a;
//	const int _b = 2024;
//	Stack _st = 10;
//};


class Date
{
public:
	Date(int year = 2024, int month = 8, int day = 31)
	{
		_year = year;
		_month = month;
		_day = day;
	}
	Date(const Date& d)
	{
		cout << "Date(const Date& d)" << endl;
		_year = d._year;
		_month = d._month;
		_day = d._day;
	}
	~Date()
	{
		cout << "~Date()" << endl;
	}
	void print()
	{
		cout << _year << "/" << _month << "/" << _day << endl;
	}
private:
	int _year;
	int _month;
	int _day;
};

//Date& Fun1()
//{
//	Date d;
//	return d;
//}
//
//
//int main()
//{
//	Date d1 = Fun1();
//	cout << endl;
//	return 0;
//}




class Stack
{
public:

	Stack(int n = 4)
		: _a(new int[n])
		, _top(0)
		, _capacity(n)
	{}
	Stack(const Stack& st)
	{
		_a = new int[st._capacity];
		memcpy(_a, st._a, sizeof(int) * st._top);
		_top = st._top;
		_capacity = st._capacity;
	}
	~Stack()
	{
		delete[_capacity] _a;
		_top = 0;
		_capacity = 0;
	}
	void Push(int x)
	{
		if (_capacity == _top)
		{
			int newcapacity = _capacity == 0 ? 4 : _capacity * 2;
			int* newarr = new int[newcapacity];
			_a = newarr;
			_capacity = newcapacity;
		}
		_a[_top++] = x;
	}
private:
	int* _a = new int;
	int _top = 0;
	int _capacity = 0;
};

//class Myqueue
//{
//public:
//	Myqueue()
//		:pushst(10)
//		, popst(10)
//	{
//		cout << "Myqueue()" << endl;
//	}
//private:
//	Stack pushst;
//	Stack popst;
//};

int main()
{
	Stack st1;
	st1.Push(1);
	st1.Push(2);
	st1.Push(3);
	st1.Push(4);
	st1.Push(5);
	Stack st2(st1);
	return 0;
}